Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


sbapp/mapview/utils.py bfcff07025cf00a274c9412cc69d8649f08b8f66 (bfcff070) Text, 1.61 KB

T8b949e# coding=utf-8

Te6edf3__all__ Tff7b72= Tb4b4b4[Ta5d6ff"Ta5d6ffclampTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffhaversineTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffget_zoom_for_radiusTa5d6ff"Tb4b4b4]

Tff7b72from T7ee787math Tff7b72import Te6edf3asinTb4b4b4, Te6edf3cosTb4b4b4, Te6edf3piTb4b4b4, Te6edf3radiansTb4b4b4, Te6edf3sinTb4b4b4, Te6edf3sqrt

Tff7b72from T7ee787kivyT7ee787.T7ee787coreT7ee787.T7ee787window Tff7b72import Te6edf3Window
Tff7b72from T7ee787kivyT7ee787.T7ee787metrics Tff7b72import Te6edf3dp


Tff7b72def Td2a8ffclampTb4b4b4(Te6edf3xTb4b4b4, Te6edf3minimumTb4b4b4, Te6edf3maximumTb4b4b4)Tb4b4b4:
Tff7b72return Tffa657maxTb4b4b4(Te6edf3minimumTb4b4b4, Tffa657minTb4b4b4(Te6edf3xTb4b4b4, Te6edf3maximumTb4b4b4)Tb4b4b4)


Tff7b72def Td2a8ffhaversineTb4b4b4(Te6edf3lon1Tb4b4b4, Te6edf3lat1Tb4b4b4, Te6edf3lon2Tb4b4b4, Te6edf3lat2Tb4b4b4)Tb4b4b4:
T8b949e"""
Calculate the great circle distance between two points
on the earth (specified in decimal degrees)

Taken from: http://stackoverflow.com/questions/4913349/haversine-formula-in-python-bearing-and-distance-between-two-gps-points
"""
T8b949e# convert decimal degrees to radians
Te6edf3lon1Tb4b4b4, Te6edf3lat1Tb4b4b4, Te6edf3lon2Tb4b4b4, Te6edf3lat2 Tff7b72= Tffa657mapTb4b4b4(Te6edf3radiansTb4b4b4, Tb4b4b4[Te6edf3lon1Tb4b4b4, Te6edf3lat1Tb4b4b4, Te6edf3lon2Tb4b4b4, Te6edf3lat2Tb4b4b4]Tb4b4b4)
T8b949e# haversine formula
Te6edf3dlon Tff7b72= Te6edf3lon2 Tff7b72- Te6edf3lon1
Te6edf3dlat Tff7b72= Te6edf3lat2 Tff7b72- Te6edf3lat1
Te6edf3a Tff7b72= Te6edf3sinTb4b4b4(Te6edf3dlat Tff7b72/ T79c0ff2Tb4b4b4) Tff7b72*Tff7b72* T79c0ff2 Tff7b72+ Te6edf3cosTb4b4b4(Te6edf3lat1Tb4b4b4) Tff7b72* Te6edf3cosTb4b4b4(Te6edf3lat2Tb4b4b4) Tff7b72* Te6edf3sinTb4b4b4(Te6edf3dlon Tff7b72/ T79c0ff2Tb4b4b4) Tff7b72*Tff7b72* T79c0ff2

Te6edf3c Tff7b72= T79c0ff2 Tff7b72* Te6edf3asinTb4b4b4(Te6edf3sqrtTb4b4b4(Te6edf3aTb4b4b4)Tb4b4b4)
Te6edf3km Tff7b72= T79c0ff6367 Tff7b72* Te6edf3c
Tff7b72return Te6edf3km


Tff7b72def Td2a8ffget_zoom_for_radiusTb4b4b4(Te6edf3radius_kmTb4b4b4, Te6edf3latTff7b72=Tff7b72NoneTb4b4b4, Te6edf3tile_sizeTff7b72=T79c0ff256.0Tb4b4b4)Tb4b4b4:
T8b949e"""See: https://wiki.openstreetmap.org/wiki/Zoom_levels"""
Te6edf3radius Tff7b72= Te6edf3radius_km Tff7b72* T79c0ff1000.0
Tff7b72if Te6edf3lat Tff7b72is Tff7b72NoneTb4b4b4:
Te6edf3lat Tff7b72= T79c0ff0.0 T8b949e# Do not compensate for the latitude

T8b949e# Calculate the equatorial circumference based on the WGS-84 radius
Te6edf3earth_circumference Tff7b72= T79c0ff2.0 Tff7b72* Te6edf3pi Tff7b72* T79c0ff6378137.0 Tff7b72* Te6edf3cosTb4b4b4(Te6edf3lat Tff7b72* Te6edf3pi Tff7b72/ T79c0ff180.0Tb4b4b4)

T8b949e# Check how many tiles that are currently in view
Te6edf3nr_tiles_shown Tff7b72= Tffa657minTb4b4b4(Te6edf3WindowTff7b72.Td2a8ffsizeTb4b4b4) Tff7b72/ Te6edf3dpTb4b4b4(Te6edf3tile_sizeTb4b4b4)

T8b949e# Keep zooming in until we find a zoom level where the circle can fit inside the screen
Te6edf3zoom Tff7b72= T79c0ff1
Tff7b72while Te6edf3earth_circumference Tff7b72/ Tb4b4b4(T79c0ff2 Tff7b72<< Tb4b4b4(Te6edf3zoom Tff7b72- T79c0ff1Tb4b4b4)Tb4b4b4) Tff7b72* Te6edf3nr_tiles_shown Tff7b72> T79c0ff2 Tff7b72* Te6edf3radiusTb4b4b4:
Te6edf3zoom Tff7b72+Tff7b72= T79c0ff1
Tff7b72return Te6edf3zoom Tff7b72- T79c0ff1 T8b949e# Go one zoom level back


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────